import { Module } from '@nestjs/common'
import { JwtModule, type JwtModuleOptions } from '@nestjs/jwt'
import { ConfigService } from '@nestjs/config'
import { ConfigEnum } from '../enums/config.enum'
import { TimeUnit } from '../enums/time-unit.enum'

/**
 * JWT 令牌相关功能模块（全局）
 */
@Module({
  imports: [
    // 异步注册 JWT 模块（从配置服务获取参数）
    JwtModule.registerAsync({
      // 工厂函数：通过配置服务生成 JWT 模块配置
      useFactory(configService: ConfigService) {
        // 从配置中获取 JWT 基础配置（密钥、有效期等）
        const config = configService.get<NestConfig.Jwt>(ConfigEnum.JWT)!
        // 定义 JWT 模块配置对象
        const option: JwtModuleOptions = { signOptions: {} }
        option.secret = config.secret // 设置签名密钥
        option.signOptions!.expiresIn = TimeUnit.DAY // 设置令牌有效期（1天）
        return option
      },
      global: true, // 标记为全局模块，无需在其他模块重复导入
      inject: [ConfigService], // 标记为全局模块，无需在其他模块重复导入
    }),
  ],
})
export class TokenModule {}
